﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Bastanteo.Domain;
using Bastanteo.Persistencia;


namespace Bastanteo.Tests
{
    [TestFixture]
    public class TestRepresentanteDAO
    {
        IrepresentanteDAO dao = null;
        Representante creado = null;
        Representante representanteaCrear = new Representante();

        [TestFixtureSetUp]
        public void InicializarPruebas()
        {

            dao = new Persistencia.ADO.RepresentanteDAO();
            representanteaCrear.RepresentanteNumDoc = "40943615";
            representanteaCrear.RepresentanteApellidos = "Huayta Peralta";
            representanteaCrear.RepresentanteTipoDoc = "DNI";
            representanteaCrear.RepresentanteNombre = "Roberto Erik";
            
            representanteaCrear.CargoId = 1;
            representanteaCrear.ClienteId = "40943615";
        }

        
        [Test]
        public void Test1_CrearRepresentante()
        {
            // - Validar que ocurra un error al intentar crear un representante con un grupo nulo
            

          

            Assert.Catch<Exception>(delegate
            {
                creado = dao.Crear(representanteaCrear);
            });
            ////creado.Grupo = "A";
            representanteaCrear.GrupoId = 1;
            

            // - Validar que se cree un representante correctamente (sin error)
            Assert.DoesNotThrow(delegate
            {
                creado =  dao.Crear(representanteaCrear);
            });

            // - Validar que el representante creado no sea nulo, tenga el dni y el grupo ingresados

            Assert.IsNotNull(creado);
            Assert.AreEqual(creado.RepresentanteNumDoc , representanteaCrear.RepresentanteNumDoc );
            Assert.AreEqual(creado.GrupoId, representanteaCrear.GrupoId );

        }
        
        [Test]
        public void Test2_ObtenerRepresentante()
        {
            Representante representanteObtenido = null;
            // - Validar que se retorne nulo al obtener un representante que no existe
            Assert.DoesNotThrow(delegate
            {
                representanteObtenido  = dao.Obtener("100") ;
            });
            Assert.IsNull(representanteObtenido);
            // - Validar que se obtenga el representante creado satisfactoriamente en el Test1 (que no sea nulo)
            Assert.DoesNotThrow(delegate
            {
                representanteObtenido  = dao.Obtener(creado.RepresentanteNumDoc);
            });
            Assert.IsNotNull(representanteObtenido);
            // - Validar que el dni obtenido sea el registrado anteriormente
            Assert.AreEqual(representanteObtenido.RepresentanteNumDoc , creado.RepresentanteNumDoc );
        
        }

        
        [Test]
        public void Test3_EliminarRepresentante()
        {
            Representante representanteaEliminar  = dao.Obtener(creado.RepresentanteNumDoc );
            // - Validar que ocurre un error si se intenta eliminar un representante nulo
            Assert.Catch<Exception>(delegate
            {
                dao.Eliminar(null);
            });
            // - Validar que se elimina correctamente el representante creado previamente
            Assert.DoesNotThrow(delegate
            {
                dao.Eliminar(representanteaEliminar);
            });
            // - Validar que luego de eliminado se retorne nulo al obtenerlo de nuevo
            Representante RepresentanteEliminado = dao.Obtener(creado.RepresentanteNumDoc );
            Assert.IsNull(RepresentanteEliminado);

        }

        //[TestFixtureTearDown]
        //public void FinalizarPruebas()
        //{
        //    Persistencia.NH.NHibernateHelper.CerrarFabrica();
        //}
    
        
        }




    }
